home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d3 / rettig.arc / TRSOURCE.EXE / CURDIR.ASM < prev    next >
Assembly Source File  |  1990-10-22  |  3KB  |  115 lines

  1. ; CURDIR.ASM
  2. ;
  3. ; by Leonard Zerman
  4. ;
  5. ; Placed in the public domain by Tom Rettig Associates, 10/22/1990.
  6. ;
  7. ;---------------------------------------------------------------
  8. ;     SYNTAX:  memvar = CURDIR( [<drive>] )
  9. ;
  10. ;    RETURNS:  Current disk directory on specified drive,
  11. ;              or default drive if no drive is specified.
  12. ;---------------------------------------------------------------
  13. ;
  14.          INCLUDE EXTENDA.INC
  15.          DATASEG
  16.  
  17.          CLpublic <CURDIR>
  18.  
  19.          CLstatic <byte DRIVEBUFF ' :\' 65 DUP (0)>
  20.          CLstatic <byte NULLSTR 0>
  21.          CLstatic <cptr OLD_INT24>
  22.  
  23.          CLfunc   char CURDIR <char DRIVE>
  24.  
  25.          CLcode
  26.  
  27.           PUSH     DS          ; Save caller's DS
  28.           PUSH     ES
  29.           MOV      AL,24H 
  30.           DOSREQ   35H         ; GET INT 24 vector.
  31.  
  32.           MOV      SI,OFFSET OLD_INT24
  33.           MOV      [SI],BX
  34.           MOV      [SI+2],ES
  35.           PUSH     DS
  36.  
  37.           MOV      AX,CS
  38.           MOV      DS,AX
  39.           MOV      DX,OFFSET NEW_INT24-CODESEG
  40.           MOV      AL,24H
  41.           DOSREQ   25H         ; SET INT 24 vector.
  42.  
  43.           POP      DS
  44.           XOR      DL,DL          ; assume no parm
  45.           CMP      PCOUNT,1
  46.           JG       ERROR
  47.           JL       CURDIR1
  48.           TESTNUL  DRIVE
  49.           JZ       CURDIR1
  50.           LES      DI,DRIVE
  51.           XOR      DL,DL          ; assume no parm
  52.           MOV      DL,BYTE PTR ES:[DI]
  53.           AND      DL,0DFH        ; Force to upper case
  54.           SUB      DL,'A'-1       ; Convert to numeric code (A=1, etc.)
  55. CURDIR1:
  56.           MOV      SI,OFFSET DRIVEBUFF 
  57.           MOV      AX,SEG DRIVEBUFF
  58.           MOV      DS,AX
  59.           CMP      DL,0
  60.           JNE      CURDIR1A
  61.           DOSREQ   19H                    ; Get current drive
  62.           ADD      AL,'A'                 ; Convert to ASCII
  63.           MOV      DS:[SI],AL
  64.           JMP      SHORT CURDIR1B
  65. CURDIR1A:                         
  66.           MOV      DS:[SI],DL              ; Store drive number in 
  67.                                            ; CUR_DRIVE
  68.           ADD      BYTE PTR DS:[SI],'A'-1  ; Convert to ASCII
  69. CURDIR1B:
  70.           MOV      SI,OFFSET DRIVEBUFF+3 
  71.           MOV      AX,SEG DRIVEBUFF
  72.           MOV      DS,AX
  73.           DOSREQ   47H                      ; Get directory
  74.  
  75.           JNC      CURDIR2
  76. ERROR:
  77.           MOV      DI,OFFSET NULLSTR 
  78.           MOV      AX,SEG NULLSTR
  79.           MOV      ES,AX
  80.           JMP      SHORT EXIT
  81.  
  82. CURDIR2:
  83.           MOV      DI,OFFSET DRIVEBUFF 
  84.           MOV      AX,SEG DRIVEBUFF
  85.           MOV      ES,AX
  86.  
  87. EXIT:
  88.           PUSH     ES
  89.           PUSH     DI
  90.           MOV      DX, SEG OLD_INT24
  91.           MOV      DS,DX
  92.           MOV      DX,WORD PTR OLD_INT24 
  93.           MOV      AX,WORD PTR OLD_INT24[2]
  94.           MOV      DS,AX
  95.           MOV      AL,24H
  96.           DOSREQ   25H                     ;set old vector
  97.           POP      AX
  98.           POP      DX
  99.           POP      ES
  100.           POP      DS
  101.           CLret    DX,AX
  102.  
  103. ;--------------------------------------
  104. WORKFUNCS
  105. NEW_INT24 PROC    FAR
  106.           
  107.           IRET
  108.  
  109. NEW_INT24 ENDP
  110. ENDWORK
  111. ;--------------------------------------
  112. ;**************************************
  113.           END
  114.  
  115.